#ifndef _POLSYS_ARMLIB_H_
#define _POLSYS_ARMLIB_H_

#include "typedef.h"
#include "cmsis_compiler.h" 

#ifdef __cplusplus
 extern "C" {
#endif




// 返回 true 表示处于中断环境
#define Mcu_IsIrqMode()   (__get_IPSR() != 0u)

// 获取当前全局中断开关情况，返回一个u32代表全局中断开关寄存器的值
#define Mcu_GetIntStatus()  __get_PRIMASK()

// 设置当前全局中断开关情况，u32_st 使用 Mcu_GetIntStatus 获取，通常用于临时关闭中断之后还原之前的状态。
#define Mcu_SetIntStatus(u32_st) __set_PRIMASK(u32_st);

#define Mcu_EnableInt()     __enable_irq()

#define Mcu_DisableInt()    __disable_irq();

extern int DisIntLevel;


/**
 * 进入临界区，全局中断被关闭
*/
STATIC_FORCE_IN_LINE void Mcu_EnterCritical()
{
    __disable_irq();
    DisIntLevel++;
}

/**
 * 退出临界区。与 Mcu_EnterCritical 成对使用，进入几次临界区就要退出几次临界区才能开启全局中断。
*/
STATIC_FORCE_IN_LINE void Mcu_ExitCritical()
{
    if(DisIntLevel > 0)DisIntLevel--;
    if(DisIntLevel == 0)__enable_irq();
}

#ifdef __cplusplus
}
#endif

#endif
